#pragma once

#include <iostream>
#include <fstream>
#include <gp_Pnt.hxx>
#include <gp_Vec.hxx>
#include <gp_Ax1.hxx>
#include <gp_Ax2.hxx>
#include <gp_Mat.hxx>
#include <gp_Dir.hxx>

// 序列化 gp_XYZ
extern std::ofstream& operator<<(std::ofstream& ofs, const gp_XYZ& xyz);

// 反序列化 gp_XYZ
extern std::ifstream& operator>>(std::ifstream& ifs, gp_XYZ& xyz);

// 序列化 gp_Vec
extern std::ofstream& operator<<(std::ofstream& ofs, const gp_Vec& vec);

// 反序列化 gp_Vec
extern std::ifstream& operator>>(std::ifstream& ifs, gp_Vec& vec);

// 序列化 gp_Pnt 
extern std::ofstream& operator<<(std::ofstream& ofs, const gp_Pnt& pnt);

// 反序列化 gp_Pnt
extern std::ifstream& operator>>(std::ifstream& ifs, gp_Pnt& pnt);

// 序列化 gp_Dir 
extern std::ofstream& operator<<(std::ofstream& ofs, const gp_Dir& dir);

// 反序列化 gp_Dir
extern std::ifstream& operator>>(std::ifstream& ifs, gp_Dir& dir);

// 序列化 gp_Ax1
extern std::ofstream& operator<<(std::ofstream& ofs, const gp_Ax1& ax1);

// 反序列化 gp_Ax1
extern std::ifstream& operator>>(std::ifstream& ifs, gp_Ax1& ax1);

// 序列化 gp_Ax2
extern std::ofstream& operator<<(std::ofstream& ofs, const gp_Ax2& ax2);

// 反序列化 gp_Ax2
extern std::ifstream& operator>>(std::ifstream& ifs, gp_Ax2& ax2);

// 序列化 gp_Mat
extern std::ofstream& operator<<(std::ofstream& ofs, const gp_Mat& mat);

// 反序列化 gp_Mat
extern std::ifstream& operator>>(std::ifstream& ifs, gp_Mat& mat);

// 序列化 gp_Trsf
extern std::ofstream& operator<<(std::ofstream& ofs, const gp_Trsf& trsf);

// 反序列化 gp_Trsf
extern std::ifstream& operator>>(std::ifstream& ifs, gp_Trsf& trsf);

